home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-10-11 | 7.0 KB | 326 lines | [TEXT/Imag] |
- var {global }
- FilterSize: real; {0-100% of image size}
- TransitionWidth: real; {0-100% of filter radius}
- PlotFilter: boolean;
-
- macro 'FFT [F]';
- begin
- fft('foreward');
- end;
-
-
- macro 'Abitrary Selection FFT [A]';
- var
- pid1, pid2, x, y, w,h, size: integer;
- scale: real;
- begin
- GetRoi(x, y, w, h);
- if w = y then begin
- SelectAll;
- GetRoi(x, y, w, h);
- end;
- if w > h then begin
- x := x + (w - h) div 2;
- w := h;
- MakeRoi(x, y, w, hª);
- end;
- if h > w then begin
- y := y+ (h - w) div 2;
- h := w;
- MakeRoi(x, y, w, h);
- end;
- size := 2048;
- if w <= 32 then size := 32
- else if w <= 64 then size := 64
- else if w <= 128 then size := 128
- else if w <= 256 then size := 256
- else if w <= 512 then size := 512
- else if w <= 1024 then size := 1024;
- scale := size / w;
- SetScaling('Bilinear; New Window');
- ScaleAndRotate(scale, scale, 0);
- pid1 := pidNumber;
- fft('foreward');
- pid2 := pidNumber;
- SelectPic(pid1);
- dispose;
- SelectPic(pid2);
- end;
-
-
- macro 'Inverse FFT [I]';
- begin
- fft('Inverse');
- end;
-
-
- macro 'Inverse FFT with Custom Mask [M]';
- var
- w,h, pixWidth, i, nSmooths: integer;
- begin
- GetPicSize(w, h);
- GetHistogram(0, 0, w,h);
- if (histogram[0] = 0) and (histogram[255] = 0) then begin
- PutMessage('No mask. You need to edit the power spectrum using black to pass frequencies or white to filter freqwencies.');
- exit;
- end;
- pixWidth := GetNumber('Transition Width in Pixels:', 6, 0);
- nSmooths := pixWidth div 2;
- if histogram[0] <> 0 then
- ChangeValues(1, 255, 255)
- else
- ChangeValues(0, 254, 0);
- for i := 1 to nSmooths do
- filter('smooth more');
- fft('Inverse with Filter');
- end;
-
- macro 'Inverse FFT with Filter';
- begin
- fft('Inverse with Filter');
- end;
-
- {
- procedure fftFilter(type: string; percent: integer);
- var
- width, height, size, loc: integer;
- begin
- if percent < 0 then
- percent := 0;
- if percent > 100 then
- percent := 100;
- SaveState;
- fft('foreward');
- GetPicSize(width, height);
- size := round(( percent/100) * width);
- loc := width div 2 - size/2;
- MakeOvalRoi(loc, loc, size, size);
- if type = 'high' then
- SetForeground(0)
- else
- SetForeground(255);
- Fill;
- fft('Inverse');
- RestoreState;
- end;
-
-
- macro 'High Pass Filter... [H]';
- var
- percent: integer;
- begin
- percent := GetNumber('Filter size (0-100%):', 10, 0);
- fftFilter('high', percent);
- end;
-
- macro 'Low Pass Filter... [L]';
- var
- percent: integer;
- begin
- percent := GetNumber('Filter size (0-100%):', 20, 0);
- fftFilter('low', percent);
- end;
- }
-
-
- procedure MakeFilter(size, tWidth, min, max: real);
- var
- width, height, roiSize: integer;
- pixWidth, i, loc, v: integer;
- begin
- SaveState;
- if size > 100 then size := 100;
- if size < 0 then size := 0;
- if tWidth > 100 then tWidth := 100;
- if tWidth < 0 then tWidth := 0;
- if min > 100 then min := 100;
- if min < 0 then min := 0;
- if max > 100 then max := 100;
- if max < 0 then max := 0;
- if min > max then min := max;
- GetPicSize(width, height);
- SelectAll;
- size := round(size / 100 * width);
- min := round(min / 100 * 255);
- max := round(max / 100 * 255);
- Setbackground(min);
- Clear;
- roiSize := size;
- pixWidth := round(size div 2 * (tWidth/100));
- if pixWidth < 1 then
- pixWidth := 1;
- for i := 1 to pixWidth do begin
- loc := width div 2 - roiSize/2;
- MakeOvalRoi(loc, loc, roiSize, roiSize);
- v := (max-min) * exp(-4.5 * sqr(1 - i / pixWidth)) + min; {gaussian shape}
- SetForeground(v);
- Fill;
- roiSize := roiSize - 2;
- end;
- KillRoi;
- RestoreState;
- end;
-
-
- procedure doFilter(filterType: string);
- var
- width, height: integer;
- begin
- if FilterSize = 0 then
- FilterSize := 20;
- if TransitionWidth = 0 then
- TransitionWidth := 50;
- FilterSize := GetNumber('Filter size (0-100%):', FilterSize, 0);
- TransitionWidth := GetNumber('Transition Width (0-100%):', TransitionWidth, 0);
- if TransitionWidth = 0 then
- TransitionWidth := 0.0001;
- fft('foreward');
- MakeFilter(FilterSize, TransitionWidth, 0, 100);
- if FilterType = 'high' then
- Invert;
- if PlotFilter then begin
- getPicSize(width, height);
- MakeLineRoi(0, height / 2, width, height / 2);
- PlotProfile;
- KillRoi;
- end;
- fft('Inverse with Filter');
- end;
-
-
- macro '(---'; begin end;
-
-
- macro 'High Pass Filter... [H]';
- begin
- doFilter('high');
- end;
-
- macro 'Low Pass Filter... [L]';
- begin
- doFilter('low');
- end;
-
- macro 'Toggle Filter Plotting ... [T]';
- begin
- if PlotFilter then begin
- PlotFilter := false;
- PutMessage('Filter profiles will not be plotted.');
- end else begin
- PlotFilter := true;
- PutMessage('Filter profiles will be plotted.');
- end;
- end;
-
-
- macro '(---'; begin end;
-
-
- macro 'Autocorrelation';
- var
- fft1, fft2: integer;
- begin
- fft('foreward');
- fft1 := pidNumber;
- ImageMath('cmul', fft1, fft1, 1, 0, 'FFT2');
- fft2 := pidNumber;
- SelectPic(fft1);
- Dispose;
- SelectPic(fft2);
- fft('Inverse');
- fft('Swap Quadrants');
- SetPicName('Autocorrelation')
- end;
-
-
- macro 'Autocorrelation with Padding';
- var
- pad, fft1, fft2: integer;
- width, height: integer;
- n,mean,mode,min,max: real;
- begin
- SelectAll;
- Measure;
- GetResults(n,mean,mode,min,max);
- Copy;
- GetPicSize(width, height);
- SetNewSize(width * 2, height * 2);
- Setbackgrount(round(mean));
- MakeNewWindow('Padded Image');
- MakeRoi(0, 0, width, height);
- Paste;
- KillRoi;
- pad := pidNumber;
- fft('foreward');
- fft1 := pidNumber;
- ImageMath('cmul', fft1, fft1, 1, 0, 'FFT2');
- fft2 := pidNumber;
- SelectPic(pad);
- Dispose;
- SelectPic(fft1);
- Dispose;
- SelectPic(fft2);
- fft('Inverse');
- fft('Swap Quadrants');
- SetPicName('Autocorrelation')
- end;
-
-
- macro '(---'; begin end;
-
- macro 'Make Filter...';
- var
- width, height: integer;
- begin
- if FilterSize = 0 then
- FilterSize := 20;
- if TransitionWidth = 0 then
- TransitionWidth := 50;
- FilterSize := GetNumber('Filter size (0-100%):', FilterSize, 0);
- TransitionWidth := GetNumber('Transition Width (0-100%):', TransitionWidth, 0);
- if TransitionWidth = 0 then
- TransitionWidth := 0.0001;
- Duplicate('Filter');
- MakeFilter(FilterSize, TransitionWidth, 0, 100);
- end;
-
-
- macro 'Redisplay Power Spectrum';
- begin
- fft('Display Power Spectrum');
- end;
-
- macro 'Swap Quadrants';
- begin
- fft('Swap Quadrants');
- end;
-
-
- macro '(---'; begin end;
-
-
- procedure roi(size: integer);
- var
- width, height: integer;
- begin
- GetPicSize(width, height);
- if size > width then
- size := width;
- if width = 0 then begin
- PutMessage('No image window open.');
- exit;
- end;
- MakeRoi(width/2 - size/2, height/2 - size/2, size, size);
- end;
-
- macro 'Create 32 x 32 selection [1]'; begin roi(32) end;
- macro 'Create 64 x 64 selection [2]'; begin roi(64) end;
- macro 'Create 128 x 128 selection [3]'; begin roi(128) end;
- macro 'Create 256 x 256 selection [4]'; begin roi(256) end;
- macro 'Create 512 x 512 selection [5]'; begin roi(512) end;
-
-
-
-
-
-